首页 > 试题广场 >

最大差值

[编程题]最大差值
  • 热度指数:12049 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

有一个长为 n 的数组 A ,求满足 0 ≤ a ≤ b < n 的 A[b] - A[a] 的最大值。

给定数组 A 及它的大小 n ,请返回最大差值。


数据范围: ,数组中的值满足
示例1

输入

[5,1],2

输出

0
示例2

输入

[5,6],2

输出

1

单调栈比较适合该题,大于栈顶进栈,否则出栈至栈顶小于当前元素再进栈.最大值就在进栈和遍历结束的时候

function getDis(A, n) {
    if (n <= 1) return 0;
    let stack = [];
    let max = 0;
    for (let i = 0; i < n; i++) {
        if (!stack.length) {
            stack.push(A[i]);
        } else {
            if (stack[stack.length - 1] < A[i]) {
                max = Math.max(max, A[i] - stack[0]);
            } else {
                while (stack.length) {
                    if (stack[stack.length - 1] >= A[i]) {
                        stack.pop();
                    } else {
                        break;
                    }
                }
            }
            stack.push(A[i]);
        }
    }
    if (stack.length) {
        max = Math.max(max, stack[stack.length - 1] - stack[0]);
    }
    return max;
}
发表于 2022-11-14 14:14:33 回复(0)
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param A int整型一维数组 
 * @param n int整型 
 * @return int整型
 */
function getDis( A ,  n ) {
    // write code here
    var min=A[0]
    var max=0
    for(var i =1;i<n;i++){
        min=Math.min(A[i],min)
        max=Math.max(A[i]-min,max)
    }
    return max
}
module.exports = {
    getDis : getDis
};
发表于 2022-03-17 09:45:58 回复(0)

问题信息

难度:
2条回答 3016浏览

热门推荐

通过挑战的用户

查看代码